package com.shujia.scala

object Demo17CLass {
  def main(args: Array[String]): Unit = {
    //1、创建对象
    val student = new Student("张三")
    println(student)

    //使用普通的方法
    student.print()

    val lisi = new Student("李四", 23)
    println(lisi)

    //样例类创建对象
    val score = new Score("001", "1", 190)
    println(score)
    //获取属性的值
    println(score.cId)
    //修改属性的只
    score.score = 200
    println(score)

    //样例类可以省略new创建对象
    val score1: Score = Score("002", "1")
    println(score1)

  }
}

//样例类
//scala在编译时动态增加类的方法，toString, ...
case class Score(sId: String, cId: String, var score: Int = 100)


//定义类
//默认构造函数，类中的所有逻辑都属于默认构造函数的代码逻辑
class Student(_name: String) {

  println("创建对象")

  val name: String = _name
  //定义不赋值
  var age: Int = _

  //重载构造函数
  def this(_name: String, age: Int) {
    //在重载构造函数的第一行需要调用默认构造函数
    this(_name)
    //给其他属性赋值
    this.age = age
  }


  //定义普通方法
  def print(): Unit = println(s"$name\t$age")

  //重写父类方法
  override def toString = s"Student($name, $age)"

  println("创建完成")
}